Skip to main content

4. Keyboard Navigation

  • Ensure all interactive elements are reachable and usable via keyboard.

  • Use tabindex="0" for custom components that should be focusable.

  • Avoid removing outlines for focused elements (outlines help users see where focus is).

  • Use logical tab order—elements should be focusable in a way that matches the visual and functional flow of the page.

  • Provide visible focus indicators for all focusable elements.

  • Use Angular’s @HostListener to handle keyboard events for custom components:

    // Example: Custom button with keyboard support
    @Component({
    selector: "app-custom-button",
    template: `<div tabindex="0" role="button" (click)="onClick()">
    Click Me
    </div>`,
    })
    export class CustomButtonComponent {
    @HostListener("keydown", ["$event"])
    handleKeyDown(event: KeyboardEvent) {
    if (event.key === "Enter" || event.key === " ") {
    this.onClick();
    event.preventDefault();
    }
    }
    onClick() {
    // Button action
    }
    }
  • For complex widgets (menus, dialogs, etc.), follow WAI-ARIA Authoring Practices for keyboard interaction patterns.

  • Use skip links and landmarks to help keyboard users jump to main content quickly.